package com.tbit.uqbike.client.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @Author: chen
 * @Description: 骑行订单详情
 * @Date: 创建于 15:10 2022/11/1
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RideLogDetails {

    /**
     * 骑行订单号
     */
    private String orderId;
    /**
     * 运营区域id
     */
    private Integer accountId;
    /**
     * 品牌id
     */
    private Integer brandId;
    /**
     * 运营区域名称
     */
    private String accountName;
    /**
     * 订单类型 1：正常结束 2：欠款补交 3：欠款
     */
    private Integer orderType;
    /**
     * 支付状态1：已支付，2：未支付
     */
    private Integer payStatus;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 用户手机号
     */
    private String userPhone;
    /**
     * 姓名
     */
    private String userName;
    /**
     * 车辆id
     */
    private Integer machineId;
    /**
     * 车辆编号
     */
    private String userCode;
    /**
     * 设备编号
     */
    private String machineNO;
    /**
     * 订单开始时间
     */
    private Date orderStartTime;
    /**
     * 订单结束时间
     */
    private Date orderEndTime;
    /**
     * 里程
     */
    private Integer mileage;
    /**
     * 支付时间
     */
    private Date payTime;
    /**
     * 骑行费用
     */
    private Long cyclingMoney;
    /**
     * 罚款费用
     */
    private Long fineMoney;
    /**
     * 抵扣后罚款费用
     */
    private Long deductionFineMoney;
    /**
     * 抵扣后骑行费用
     */
    private Long deductionCyclingMoney;
    /**
     * 罚款类型1：站外停车，2：运营区域外停车，3：头盔锁未归还 5：禁停区调度费
     */
    private String fineType;
    /**
     * 实际支付金额
     */
    private Long actualPayMoney;
    /**
     * 卡券抵扣费用
     */
    private Long cardDeductionMoney;

    /**
     * 礼品卡抵扣费用
     */
    private Long giftCardDeductionMoney;
    /**
     * 人工修改订单抵扣费用
     */
    private Long peopleModiftDeductionMoney;
    /**
     * 其他抵扣费用
     */
    private Long otherDeductionMoney;
    /**
     * 总抵扣费用
     */
    private Long deduciontMoney;
    /**
     * 抵扣后总费用
     */
    private Long deductionEndMoney;
    /**
     * 商户订单号
     */
    private String merchantNO;
    /**
     * 人工修改订单时间
     */
    private Date peopleModiftTime;
    /**
     * 操作人id
     */
    private Integer operatorId;

    /**
     * 操作人名称
     */
    private String operatorName;
    /**
     * 操作人手机号码
     */
    private String operatorPhone;
    /**
     * 订单备注
     */
    private String remark;
    /**
     * 是否前N分钟免费骑行
     */
    private Integer valid;
    /**
     * 计费详情
     */
    private String billingDetails;
    /**
     * 会员卡抵扣费用
     */
    private Long vipCard;
    /**
     * 优惠券抵扣费用
     */
    private Long couponCard;
    /**
     * 骑行卡抵扣费用
     */
    private Long rideCard;
    /**
     * 分区id
     * -1: 还车时车辆未定位到所在分区
     */
    private Integer regionId;

    /**
     * 待支付金额（订单应付金额 - 用户余额）
     */
    private Long waitingPayMoney;

    /**
     * 用户可用余额
     */
    private Long userMoney;
    /**
     * 用户余额抵扣金额
     */
    private Long userMoneyDeduction;

    /**
     * 计算用户待支付金额
     * 待支付金额 = 订单应付金额 - 用户余额
     * 用户余额抵扣金额 = 如果用户余额大于等于订单应付金额-> 订单应付金额，如果用户余额小于订单应付金额->用户余额
     * @param userMoney 用户当前余额
     */
    public void computeWaitingPayMoney(Long userMoney) {
        this.userMoney = userMoney;
        waitingPayMoney = deductionEndMoney - userMoney < 0 ? 0 : deductionEndMoney - userMoney;
        userMoneyDeduction = userMoney >= deductionEndMoney ? deductionEndMoney : userMoney;
    }
}
